package com.augurit.gzcgwsp.excelimportexport.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.augurit.gzcgwsp.excelimportexport.dao.YwRqQyjyxkZyaqjsglryzkDao;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkZyaqjsglryzk;
import com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkZyaqjsglryzkService;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalZyaqjsglryzk;
import com.augurit.gzcgwsp.rqqyjyxk.service.IYwRqQyjyxkFinalZyaqjsglryzkService;

@Service
@Transactional
public class YwRqQyjyxkZyaqjsglryzkServiceImpl implements IYwRqQyjyxkZyaqjsglryzkService {
    private final static Logger log=Logger.getLogger(YwRqQyjyxkZyaqjsglryzkServiceImpl.class);
	@Autowired
	YwRqQyjyxkZyaqjsglryzkDao ywRqQyjyxkZyaqjsglryzkDao;
	@Autowired
    IYwRqQyjyxkFinalZyaqjsglryzkService zyaqryService;
	/**
	 * 保存 主要安全、技术管理人员状况
	 * @param ywRqQyjyxkZyaqjsglryzk
	 */
	public void save(YwRqQyjyxkZyaqjsglryzk ywRqQyjyxkZyaqjsglryzk) {
		ywRqQyjyxkZyaqjsglryzkDao.save(ywRqQyjyxkZyaqjsglryzk);
	}
	
	/**
	 * 根据企业id获取 主要安全、技术管理人员状况列表
	 * @param qyid
	 * @return
	 */
	private List<YwRqQyjyxkZyaqjsglryzk> listByQyid(Long qyid){
	    String hql = "from YwRqQyjyxkZyaqjsglryzk t where t.qyid = '" + qyid + "'";
	    List<YwRqQyjyxkZyaqjsglryzk> entityList = ywRqQyjyxkZyaqjsglryzkDao.find(hql);
        return entityList;
	}

	/**
	 * 解析 主要安全、技术管理人员状况
	 * @param hssfsheet
	 * @param acceptNo
	 * @param qyid
	 * @return
	 */
	public YwRqQyjyxkZyaqjsglryzk parseZyaqjsglryzk(HSSFSheet hssfsheet,
			String acceptNo, Long qyid, String username) {
		String xm = null;//姓名
		String sfzhm = null;//身份证号码
		String zw = null;//职务
		String rzzg = null;//任职资格
		String zsbh = null;//证书编号
		String fzjg = null;//发证机关
		
		String hql = "from YwRqQyjyxkZyaqjsglryzk t where t.acceptNo = '"+acceptNo+"'";
			List<YwRqQyjyxkZyaqjsglryzk> list=ywRqQyjyxkZyaqjsglryzkDao.find(hql);
			for(int i=0;i<list.size();i++)
			{
				ywRqQyjyxkZyaqjsglryzkDao.delete(list.get(i));
			}
		
		try {
			HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行
			// 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
			for (int j = 27; j < hssfsheet.getPhysicalNumberOfRows(); j++) {
				hssfrow = hssfsheet.getRow(j);
				// 判断是否还存在需要导入的数据
				if (hssfrow == null) {
					// System.out.println("这里已没有数据，在第" + i + "列,第" + j + "行");
					break;
				}				
				if(j > 27){
					if (hssfrow.getCell((short) 0) == null) {
						xm = "";
					} else if (hssfrow.getCell((short) 0).getCellType() == 0) {
						xm = new Double(hssfrow.getCell((short) 0).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						xm = hssfrow.getCell((short) 0).getStringCellValue().trim();
					}					
					if (hssfrow.getCell((short) 1) == null) {
						sfzhm = "";
					} else if (hssfrow.getCell((short) 1).getCellType() == 0) {
						sfzhm = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						sfzhm = hssfrow.getCell((short) 1).getStringCellValue().trim();
					}					
					if (hssfrow.getCell((short) 2) == null) {
						zw = "";
					} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
						zw = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						zw = hssfrow.getCell((short) 2).getStringCellValue().trim();
					}
					if (hssfrow.getCell((short) 3) == null) {
						rzzg = "";
					} else if (hssfrow.getCell((short) 3).getCellType() == 0) {
						rzzg = new Double(hssfrow.getCell((short) 3).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						rzzg = hssfrow.getCell((short) 3).getStringCellValue().trim();
					}					
					if (hssfrow.getCell((short) 4) == null) {
						zsbh = "";
					} else if (hssfrow.getCell((short) 4).getCellType() == 0) {
						zsbh = new Double(hssfrow.getCell((short) 4).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						zsbh = hssfrow.getCell((short) 4).getStringCellValue().trim();
					}
					if (hssfrow.getCell((short) 5) == null) {
						fzjg = "";
					} else if (hssfrow.getCell((short) 5).getCellType() == 0) {
						fzjg = new Double(hssfrow.getCell((short) 5).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						fzjg = hssfrow.getCell((short) 5).getStringCellValue().trim();
					}
					if(StringUtils.isEmpty(xm)){
					    log.info("导入安全、技术管理人员第"+j+1+"行姓名为空");
						continue;
					}else{
						YwRqQyjyxkZyaqjsglryzk ywRqQyjyxkZyaqjsglryzk = new YwRqQyjyxkZyaqjsglryzk();
						ywRqQyjyxkZyaqjsglryzk.setQyid(qyid);
						ywRqQyjyxkZyaqjsglryzk.setAcceptNo(acceptNo);
						ywRqQyjyxkZyaqjsglryzk.setUserName(username);
						ywRqQyjyxkZyaqjsglryzk.setUploadDate(new Date());
						ywRqQyjyxkZyaqjsglryzk.setXm(xm);
						ywRqQyjyxkZyaqjsglryzk.setSfzhm(sfzhm);
						ywRqQyjyxkZyaqjsglryzk.setZw(zw);
						ywRqQyjyxkZyaqjsglryzk.setRzzg(rzzg);
						ywRqQyjyxkZyaqjsglryzk.setFzjg(fzjg);
						ywRqQyjyxkZyaqjsglryzk.setZsbh(zsbh);
						this.save(ywRqQyjyxkZyaqjsglryzk);
					}					
				}				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}		
		return null;
	}
	
	/**
     * 导出 主要安全、技术管理人员状况
     * @param hssfsheet
     * @param acceptNo
     * @param qyid
     * @return
     */
    public HSSFSheet expZyaqjsglryzk(HSSFSheet hssfsheet,
            String acceptNo, Long qyid, String username,HSSFCellStyle cs,String exptype) {
        if("qyxx".equals(exptype)){
            List<YwRqQyjyxkFinalZyaqjsglryzk> entityList = this.zyaqryService.getInfosByQyid(qyid);
            if(entityList == null || entityList.size() <= 0) return null;
            if(entityList!=null){
                try {
                    for(int i = 28, j = 0; j < entityList.size(); i++){
                        if(i < 28) continue;
                        YwRqQyjyxkFinalZyaqjsglryzk entity = entityList.get(j);
                        if(entity != null){
                            HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
                            HSSFCell cell0 = row.createCell(0);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text0 = new HSSFRichTextString(entity.getXm()==null?"":entity.getXm());// 声明文本内容
                            cell0.setCellValue(text0);// 将文本对象加入单元格
                            cell0.setCellStyle(cs); 
                          
                            HSSFCell cell1 = row.createCell(1);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text1 = new HSSFRichTextString(entity.getSfzhm()==null?"":entity.getSfzhm());// 声明文本内容
                            cell1.setCellValue(text1);// 将文本对象加入单元格
                            cell1.setCellStyle(cs); 
                          
                            HSSFCell cell2 = row.createCell(2);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text2 = new HSSFRichTextString(entity.getZw()==null?"":entity.getZw());// 声明文本内容
                            cell2.setCellValue(text2);// 将文本对象加入单元格
                            cell2.setCellStyle(cs); 
                            
                            HSSFCell cell3 = row.createCell(3);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text3 = new HSSFRichTextString(entity.getRzzg()==null?"":entity.getRzzg());// 声明文本内容
                            cell3.setCellValue(text3);// 将文本对象加入单元格
                            cell3.setCellStyle(cs); 
                            
                            HSSFCell cell4 = row.createCell(4);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text4 = new HSSFRichTextString(entity.getZsbh()==null?"":entity.getZsbh());// 声明文本内容
                            cell4.setCellValue(text4);// 将文本对象加入单元格
                            cell4.setCellStyle(cs); 
                            
                            HSSFCell cell5 = row.createCell(5);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text5 = new HSSFRichTextString(entity.getFzjg()==null?"":entity.getFzjg());// 声明文本内容
                            cell5.setCellValue(text5);// 将文本对象加入单元格
                            cell5.setCellStyle(cs); 
                        }
                        j++;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
        
        }else{
            List<YwRqQyjyxkZyaqjsglryzk> entityList = this.listByQyid(qyid);
            if(entityList == null || entityList.size() <= 0) return null;
            if(entityList!=null){
                try {
                    for(int i = 28, j = 0; j < entityList.size(); i++){
                        if(i < 28) continue;
                        YwRqQyjyxkZyaqjsglryzk entity = entityList.get(j);
                        if(entity != null){
                            HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
                            HSSFCell cell0 = row.createCell(0);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text0 = new HSSFRichTextString(entity.getXm()==null?"":entity.getXm());// 声明文本内容
                            cell0.setCellValue(text0);// 将文本对象加入单元格
                            cell0.setCellStyle(cs); 
                          
                            HSSFCell cell1 = row.createCell(1);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text1 = new HSSFRichTextString(entity.getSfzhm()==null?"":entity.getSfzhm());// 声明文本内容
                            cell1.setCellValue(text1);// 将文本对象加入单元格
                            cell1.setCellStyle(cs); 
                          
                            HSSFCell cell2 = row.createCell(2);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text2 = new HSSFRichTextString(entity.getZw()==null?"":entity.getZw());// 声明文本内容
                            cell2.setCellValue(text2);// 将文本对象加入单元格
                            cell2.setCellStyle(cs); 
                            
                            HSSFCell cell3 = row.createCell(3);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text3 = new HSSFRichTextString(entity.getRzzg()==null?"":entity.getRzzg());// 声明文本内容
                            cell3.setCellValue(text3);// 将文本对象加入单元格
                            cell3.setCellStyle(cs); 
                            
                            HSSFCell cell4 = row.createCell(4);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text4 = new HSSFRichTextString(entity.getZsbh()==null?"":entity.getZsbh());// 声明文本内容
                            cell4.setCellValue(text4);// 将文本对象加入单元格
                            cell4.setCellStyle(cs); 
                            
                            HSSFCell cell5 = row.createCell(5);// 在本行的第一个单元格中写入数据
                            HSSFRichTextString text5 = new HSSFRichTextString(entity.getFzjg()==null?"":entity.getFzjg());// 声明文本内容
                            cell5.setCellValue(text5);// 将文本对象加入单元格
                            cell5.setCellStyle(cs); 
                        }
                        j++;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
        }
        
      
        return hssfsheet;
    }

    public Map importFinalQyData(String acceptNo, Long qyid) {
        List<YwRqQyjyxkZyaqjsglryzk> list=this.getList(acceptNo, qyid);
        for(YwRqQyjyxkZyaqjsglryzk entity:list){
            YwRqQyjyxkFinalZyaqjsglryzk finalentity = new DozerBeanMapper().map(entity, YwRqQyjyxkFinalZyaqjsglryzk.class);
            finalentity.setId(null);
            this.zyaqryService.save(finalentity);
        }
        return null;
    }
    
    private List<YwRqQyjyxkZyaqjsglryzk> getList(String acceptNo, Long qyid){
        String sql=" from "+YwRqQyjyxkZyaqjsglryzk.class.getName()+" where qyid='"+qyid+"' and acceptNo='"+acceptNo+"'";
        return this.ywRqQyjyxkZyaqjsglryzkDao.find(sql);
    }

    /**
     * 查找安全技术人员
     */
	public List<Long> findPerson(String name, String idCard, Long qyid) {
		String sql=" select qyid from " +YwRqQyjyxkZyaqjsglryzk.class.getName()+" where xm='"+name+"' and sfzhm='"+idCard+"' and qyid<>"+qyid;
		return ywRqQyjyxkZyaqjsglryzkDao.find(sql);
	}
}
